package com.leesche.zcsp.node.net.service;

import com.leesche.zcsp.node.web.model.AppPushMessage;
import com.leesche.zcsp.node.web.model.PubDevice;
import com.leesche.zcsp.node.web.model.ServOrder;

import java.util.List;
import java.util.Map;

public interface NetService {

    /**
     * @Description: 初始化阿里云物联网
     * @author 陈辉洪
     */
    void initAliyun();

    void closeAliyun();

    /**
     * 注册设备
     * @param deviceName
     * @param deviceType
     */
    String regDevice(String deviceName, String deviceType, boolean isNew);

    /**
     * 设备认证,获取阿里iot 服务器ip
     * @param deviceName
     * @return
     */
    String authDevice(String deviceName, String deviceSecret);

    /**
     * 实时查询设备是否在线
     * @param deviceName
     * @return
     */
    boolean isOnline(String deviceName);

    Map<String, String> isOnlineBatch(List<String> devices);

    /**
     * 服务器向设备下发交易记录
     * @param device
     * @param money
     * @param coin
     * @param payType 支付类型
     * @param order   订单
     * @Description: 发送购买
     */
//    boolean sendClientBuy(String deviceName, int deviceType, int money, int coin, int payType, String orderNo);
//    boolean sendClientBuy(String deviceName, int deviceType, int money, int coin, int payType, ServOrder order);
    boolean sendClientBuy(PubDevice device, int money, int coin, int payType, ServOrder order);

    /**
     * 下行指令:启动 or 关闭设备
     * @param deviceName
     * @param deviceType
     * @param isOpen
     * @return
     */
    boolean sendClientStartOrClose(String deviceName, int deviceType, boolean isOpen);

    /**
     * 下行指令:校对时间
     * @param deviceName
     * @param deviceType
     * @return
     */
    boolean sendClientSyncTime(String deviceName, int deviceType);

    /**
     * 下行指令:获取设备信息
     * @param deviceName
     * @param deviceType
     * @return
     */
    boolean sendClientGetDeviceInfo(String deviceName, int deviceType);

    /**
     * 请求设备同步交易记录(对账)
     * @param deviceName
     * @param deviceType
     * @param isForce    是否强制同步
     */
    boolean sendClientSyncTradeInfo(String deviceName, int deviceType, boolean isForce);

    /**
     * 设备参数设置指令
     * @param deviceName
     * @param paramType
     * @param paramValue
     * @return
     */
    boolean sendClientSetParam(String deviceName, int paramType, int paramValue);

    /**
     * 设备参数读取指令
     * @param deviceName
     * @param paramType
     * @return
     */
    boolean sendClientGetParam(String deviceName, int paramType);

    /**
     * 查询文件接收结果
     */
    boolean sendClientFileReceiveStatus(String deviceName, int type, int bigVersion, int smallVersion);

    /**
     * 查询设备固件版本
     */
    boolean sendClientGetVersion(String deviceName, int type);

    /**
     * 下发立即升级
     */
    boolean sendClientUpdateNow(String deviceName, int type, int bigVersion, int smallVersion);

    /**
     * 升级指令
     */
    boolean sendClientUpdateInfo(String deviceName, int type, int bigVersion, int smallVersion, int option, int isBreak, String url);

    /**
     * 推送消息给android app
     * @param message
     * @return 成功返回messageId, 失败返回null
     */
    String pushMessageToAndroid(AppPushMessage message);

}
